package com.yulan.dp;

import org.junit.Test;

/**
 * 45. 跳跃游戏 II
 * 给定一个非负整数数组，你最初位于数组的第一个位置。
 *
 * 数组中的每个元素代表你在该位置可以跳跃的最大长度。
 *
 * 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
 *
 */
public class LeetCode_45 {

    public int jump(int[] nums) {
        int ans = 0;
        int start = 0;
        int end = 1;
        while(end < nums.length){
            int maxPos = 0;
            for(int i = start;i<end;i++){
                maxPos = Math.max(maxPos,nums[i] + i);
            }

            start = end;
            end = maxPos + 1;
            ans ++;
        }

        return  ans;
    }

    public int jump2(int[] nums){
        int ans = 0;
        int end = 0;
        int maxPos = 0;
        for(int i = 0;i<nums.length-1;i++){
            maxPos = Math.max(i + nums[i],maxPos);
            if(i == end){
                end = maxPos ;
                ans ++;
            }
        }

        return ans;
    }



    @Test
    public void test(){
        int[] arr = {0};
        System.out.println(jump(arr));
    }
}
